<?php
namespace logic\user;
class User{
    
    private $userId;
    private $role; //角色 system [系统 类似超级用户用户] root [后台管理员] admin [代理管理员] site [站点管理员]  member [平台用户]
    private $roleList = array( 0=> 'system', 1=> 'root', 2=>'admin' , 3=> 'site' ,4 => 'member');
    
   // private $userInfo;
   // private $plat;  // 用户当前登陆的平台 1 平台管理后台 2 代理商管理平台 3商户管理后台 4前端用户展示平台
    private $userObject;    // 当前加载的用户对象
    private $modelList; // 拓展对象
    public function __construct($userId,$role ){
        $this->userId = $userId;
        $this->role   = strtolower( $role );
        if( $role && !in_array($this->role,$this->roleList)) logicE('用户角色不存在');
        if($role !='system' && !$this->userId ) logicE('用户不存在');    // 系统角色允许没有用户ID
        $this->init();
    }

    /**
     * 用户初始化
     */
    private function init(){
        $this->loadPlatUser();
    }

    /**
     * 读取用户各个平台所加载的用户对象的信息
     * @access public
     * @param string $method 方法名称
     * @param array $args 调用参数
     */
    public function __call($method,$args){
        if(method_exists($this->userObject, $method)){
            return call_user_func_array(array($this->userObject,$method), $args);
        }else{
            logicE($method.'方法不存在');
        }
    }
    
    /**
     * 对外开发获取对象属性
     */
    public function __get($name){
        if( in_array( $name,['userId','role'])){
            return $this->$name;
        }
    }
    
    /**
     * 获取用户对象
     * @param $userId 平台是[adminid] 代理[agentid] 《=》商户和会员是[memberid]  
     */
    public static function getInstance($userId,$role){        
        static $_instance	=	array();
        $role = strtolower($role);
        $uid = trim($userId).'_'.$role;
		if(!isset($_instance[$uid])){
            $_instance[$uid] = new \logic\user\User($userId,$role );
		}
		return $_instance[$uid];
    }

    /**
     * 获取超级系统用户对象
     */
    public function getSystemUser(){
        return self::getInstance($this->userId,'system');
    }
    
    /**
     * 获取统一的角色 并不是具体渠道的角色
     */
    public function getUserRole(){
        return  $this->role;
    }

    /**
     * 获取对象的拓展模型
     */
    public function getModel($type){
        if(method_exists($this->userObject, 'getModelClass')){
            if(! $this->modelList[$type] ){
                $classInfo = $this->userObject->getModelClass($type);
                $class = $classInfo[0];
                if( !$class ) logicE('非法的拓展模型');
                if( !class_exists($class)) logicE( $class.'对象不存在');
                $config = $classInfo[1] == 1 ? $this : $this->userId;
                $this->modelList[$type] = new $class($config);
            }
            return $this->modelList[$type];
        }else{
            return false;
        }
    }

    /**
     * 获取用户信息
     */
    public function getUserInfo($isGetPlatInfo = true){
        // TODO
    }

    /**
     * 加载各个平台的用户对象
     */
    private function loadPlatUser(){
        if( $this->role == 'system' ){
            $this->userObject = new \logic\user\System();
        }else{
            $class = "\logic\\".$this->role."\\".ucfirst($this->role);
            if( $this->role == 'site' ) $class = '\logic\site\Admin';
            $this->userObject = new $class($this->userId);
        }
        return $this->userObject;
    }

}